Elaborar un modelo de restricciones sobre un problema de planificación puede resultar realmente complejo. Además, los resolutores de restricciones suelen 
ser sistemas software complejos, por lo que traducir el modelo formal en ``algo'' que entienda el resolutor, no siempre es trivial, y requiere de un 
tiempo importante de aprendizaje, a la vez que conocimientos sólidos de programación. Incluso, transformar el modelo formal a un modelo de un lenguaje de
restricciones como MiniZinc requiere aprender el lenguaje, que a pesar de ser más sencillos, también requiere dedicarle tiempo. Por ello, poder disponer
de herramientas que permitan establecer las restricciones del modelo de una forma sencilla y natural, siendo la propia herramienta la encargada de traducir todas
esas restricciones en un modelo aceptado por un resolutor y ejecutarlo para llevar a cabo la búsqueda de soluciones, pueden resultar muy interesantes.

Por ello, se propone el desarrollo de una herramienta que permita resolver problemas de planificación mediante Planificación Basada en restricciones. Cómo se 
puede observar, no se ha especificado ningún tipo de problema concreto, pues el objetivo es que la herramienta sea la suficientemente flexible como para poder 
representar cualquier tipo de problema de planificación. Esta característica puede hacer que la herramienta pierda rendimiento en la comparativa con modelos 
específicos de cada problema. Sin embargo, este punto no se considera crríctico, pues lo que se busca no es rendimiento, si no versatilidad.


Así, la herramienta permitirá definir el modelo de restricciones subyacente al problema de planificación que se desea resolver. La definición de este modelo de 
restricciones se basará en el modelo que se plantean en \cite{HCP_22}. La elección de esta guía para el desarrollo se ha basada en que se parte de un modelo 
sencillo (``ventana temporal'' o ``time window'') que lo va refinando, incorporando nuevas características, hasta tener un modelo flexible, lo que en mi opinión, 
puede ayudar en gran medida a que su desarrollo no se estanque ni quede en un punto muerto.

Una vez que el usuario defina el modelo, la herramienta utilizará el lenguaje de modelado de restricciones MiniZinc \cite{MiniZinc}\cite{MiniZincTutorial} 
cómo interfaz con el resolutor de restricciones. MiniZinc, o su versión de más bajo nivel FlatZinc, es un lenguaje interpretado por diversos resolutores
de restricciones, por lo que la herramienta debería poder permitir elegir cualquiera de estos resolutores, otorgando al usuario la capacidad de establecer sus
propias pruebas con cada uno de los resolutores, y poder elegir así el que mejor rendimiento le aporte en su problema. Por otro lado, esta capacidad camaleónica 
de poder usar el resolutor que considere el usuario, a pesar de ser a priori trivial, no es el objetivo final del proyecto, por lo que se ve más bien cómo una evolución 
de la herramienta. El resolutor inicial que se utilizará será Gecode \cite{Gecode}, un resolutor de restricciones galardonado en varias ocasiones por el 
MinZinc Challenge \cite{MiniZincTutorial} con la medalla de oro en las diversas categorías.

Por último, con el modelo MiniZinc ya disponible, se procederá a la búsqueda de soluciones por parte del resolutor. Las soluciones que vaya encontrando el resolutor,
se presenterán al usuario de alguna forma legible, para que vea el resultado de la planificación.